import { Linking, Alert, Platform } from 'react-native';

function openDialog(urls) {
  if (Platform.OS === 'harmony') {
    urls = urls.harmony;
    return Promise.all(urls.map((element) => Linking.canOpenURL(element[1])))
      .then((results) => {
        return urls
          .filter((element, index) => results[index])
          .map((url) => ({
            text: url[0],
            onPress: () => {
              Linking.openURL(url[1]);
            },
          }));
      })
      .then((choices) => {
        // 系统内没有任何地图, 推荐下载一个
        if (choices.length < 1) {
          return Alert.alert('选择地图', '您还没有安装地图软件。', [
            {
              text: '下载高德地图',
              onPress: () =>
                Linking.openURL(
                  'store://appgallery.huawei.com/app/detail?id=C1268244389566675520'
                ),
            },
            // { text: '下载百度地图', onPress: () => Linking.openURL('') },//百度地图暂无应用市场地址
            { text: '取消' }
          ], { cancelable: true });
        }

        return Alert.alert('选择地图', '请选择一个地图打开', [
          ...choices,
          { text: '取消' },
        ]);
      });
  }
}

export default {
  options: { appName: 'MapLinking' },

  setOptions(opts) {
    this.options = { ...this.options, ...opts };
  },

  /**
   * 在地图上标注指定位置
   *
   * @param location 位置, {lat:40, lng: 118, type: 'gcj02'}
   * @param title    标题
   * @param content  内容
   */
  markLocation(location, title, content) {
    return openDialog({
      harmony: [
        // 当前版本暂不支持拉起其他地图标注指定位置
        [
          '使用花瓣地图打开',
          `maps://locationInfo?linkSource=${this.options.appName}&destinationLatitude=${location.lat}&destinationLongitude=${location.lng}&destinationName=${title}`,
        ],
      ],
    });
  },

  /**
   * 规划线路
   *
   * @param srcLocation  起始位置: {lat:40, lng: 118, title: '起点'}
   * @param distLocation 目的位置: {lat:40, lng: 118, type: 'gcj02', title: '终点'}
   * @param mode         交通方式: drive - 驾车, bus - 公交, walk - 步行
   */
  planRoute(srcLocation, distLocation, mode) {
    return openDialog({
      harmony: [
        // 当前版本暂不支持调用其他地图的规划线路功能
        [
          '使用高德地图规划路线',
          `amapuri://route/plan?dlat=${distLocation.lat}&dname=${distLocation.title
          }&slat=${srcLocation && srcLocation.lat}&dlon=${distLocation.lng
          }&slon=${srcLocation && srcLocation.lng}&t=${mode === 'drive' ? '0' : mode === 'bus' ? '1' : '2'
          }&sourceApplication=${this.options.appName}`,
        ],
        [
          '使用花瓣地图规划路线',
          `maps://routes?linkSource=${this.options.appName}&originLatitude=${srcLocation && srcLocation.lat
          }&originLongitude=${srcLocation && srcLocation.lng}&originName=${srcLocation && srcLocation.title
          }&destinationLatitude=${distLocation.lat}&destinationLongitude=${distLocation.lng
          }&destinationName=${distLocation.title}&vehicleType=${mode === 'drive' ? '0' : mode === 'bus' ? '3' : '1'
          }`,
        ],
      ],
    });
  },

  /**
   * 启动导航
   *
   * @param distLocation 目的位置: {lat:40, lng: 118, type: 'gcj02', title: '终点'}
   */
  navigate(distLocation) {
    return openDialog({
      // 当前版本暂不支持拉起其他地图进行导航
      harmony: [
        [
          '使用花瓣地图导航',
          `maps://navigation/?linkSource=${this.options.appName}&destinationLatitude=${distLocation.lat}&destinationLongitude=${distLocation.lng}&destinationName=${distLocation.title}`,
        ],
      ],
    });
  },
};
